有時候會覺得系統訊息很討厭看到,或者是條件下好好的,
偏偏報表輸出除了表頭,其餘空空如也,甚至出現No-Data-Found…….
例如: 某個卡號從未刷過卡,Select 結果直接反應就是沒有任何資料列被選取
SQL> create table emp_cards
  2  (card_no  number,
  3  emp_name varchar2(30));
塞兩筆資料
  1* insert into emp_cards(card_no, emp_name) values (1001, 'Scott')
  1* insert into emp_cards(card_no, emp_name) values (1002, 'Amy')
試跑所有資料,確認資料正確
SQL> select * from emp_cards;
  CARD_NO EMP_NAME
--------- ------------------------------
     1001 Scott
     1002 Amy
試跑有問題的卡號
SQL> select *
  2  from emp_cards
  3  where card_no = 1003;
沒有任何資料列被選取
這個時候,就可以運用union來達到把這個異常給換掉的目的
例如:以下做法就可以把討厭的異常訊息給都換掉,變成你想看到的正常結果....
select a.card_no, max(a.emp_name) emp_name
  from (select card_no, emp_name
          from emp_cards
         where card_no = 1003
        union
        select 1003 card_no, ' 無此卡號' emp_name
          from dual) a
group by a.card_no
  CARD_NO EMP_NAME
--------- ------------------------------
     1003  無此卡號
換個存在的卡號試試看,結果是正常喔。
  1  select a.card_no, max(a.emp_name) emp_name
  2    from (select card_no, emp_name
  3            from emp_cards
  4           where card_no = 1002
  5          union
  6          select 1002 card_no, ' 無此卡號' emp_name
  7            from dual) a
  8* group by a.card_no
SQL> /
  CARD_NO EMP_NAME
--------- ------------------------------
     1002 Amy
所以成功的把本來會產生異常的,變成正常的"異常訊息"。
[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1
[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1